de.cebis.moccabox.model
Class ModelNode

java.lang.Object
  extended by de.cebis.moccabox.model.ModelNode
All Implemented Interfaces:
java.io.Serializable

public class ModelNode
extends java.lang.Object
implements java.io.Serializable

Das User Inferface Management System (UIMS) ist nach dem MVC-Architekturmodell aufgebaut und besteht aus den drei Komponenten Model, View und Controller.

Die Klasse ModelNode repräsentiert das Model und spezifiziert damit die Schnittstelle zwischen Anwendungsprogramm und dem Anwendungsteil Mensch-Computer-Kommunikation (MCK). Der ModelNode definiert die MCK aus Sicht des Anwendungssystems.

Ein ModelNode repräsentiert das Aufgabenobjekt eines Vorgangs sowie die darauf verfügbaren Operationen, die als TaskCommand hinterlegt werden. Gemäß dem Ansatz des MVC, dass das UIMS aus mehreren hierarchisch kooperierenden Agenten bestehen kann, beinhaltet der ModelNode gegebenenfalls weitere ModelNode Objekte als Kinder.

Identifiziert wird jeder Knoten des Model-Baums anhand eines eindeutigen 'key', über den er direkt adressiert werden kann. Zum Auslesen eines beliebigen Nachkommens innerhalb des Baums wird die OGNL (Object Graph Navigation Language) verwendet. Jeder Knoten kennt seine eigene OGNL-Adresse sowie seinen Vater.

Metadaten über den jeweiligen Knoten sind in der ModelNodeDescription enthalten, die zur Erzeugung einer entsprechenden View (Presentation) interpretiert wird. Auf Blattebene enthält ein ModelNode einen Wert, den er repräsentiert. Besitzt ein ModelNode Kinder, so ist sein Wert null.

Author:
weichelt - 27.01.2006
See Also:
Serialized Form

Field Summary
static java.lang.String PROPERTY_CONTENT_TYPE
           
static java.lang.String PROPERTY_DESCRIPTION
           
static java.lang.String PROPERTY_FULL_KEY
           
static java.lang.String PROPERTY_KEY
           
static java.lang.String PROPERTY_OGNL_ADDRESS
           
static java.lang.String PROPERTY_OGNL_ADDRESS_ALT
           
static java.lang.String PROPERTY_PARENT
           
static java.lang.String PROPERTY_VALUE
           
static java.lang.String ROOT
           
 
Constructor Summary
ModelNode(java.lang.String key)
          Konstruktor für das Anlegen eines neuen ModelNode mit entsprechendem Key, der dem Knoten als eindeutiger Bezeichner zugewiesen wird.
 
Method Summary
 void addChild(ModelNode child)
          Hinzufügen eines neuen Kindknotens für diesen ModelNode.
 void addChild(java.lang.Object concept, ViewElementBean viewElement, ITaskContext tContext)
          Hinzufügen eines Kindknotens für diesen ModelNode mit allen Attributen, die im korrespondierenden ViewElementBean hinterlegt sind.
 void addChildren(ModelNode[] children)
          Hinzufügen eines Array von ModelNode als Kinder dieses Knotens.
 void addChildren(java.lang.String key, ModelNode[] children, TaskCommand[] tCommands)
          Hinzufügen einer Menge von ModelNode Objekten, mit einem bestimmten Bezeichner, die als Kinder des ModelNode angelegt werden.
 void addChildren(java.lang.String key, java.lang.Object[] concepts)
          Hinzufügen einer Menge von Konzepten, mit einem bestimmten Bezeichner, die als Kinder des ModelNode angelegt werden.
 void addChildren(java.lang.String key, java.lang.Object[] concepts, java.lang.String[] attributes)
          Hinzufügen einer Menge von Konzepten, mit einem bestimmten Bezeichner, die als Kinder des ModelNode mit ausgewählten Attributen der Konzepte angelegt werden.
 java.lang.String getAddress()
          Zurückliefern der eindeutigen Adresse innerhalb des Modellbaums.
 boolean getAllowsChildren()
          Zurückliefern, ob dem Knoten Kinder hinzugefügt werden können.
 java.lang.Object getAlternativeValue(java.lang.Object value)
          Zurückliefern eines alternativen Wertes für einen übergebenen Value.
 ModelNode getChildAt(int position)
          Zurückliefern des Kindes an einer bestimmten Position innerhalb der Liste der Children.
 java.lang.String[] getChildAttributes()
          Zurückliefern eines Array der Attribute der enthaltenen Kinder des ModelNode
 ModelNode getChildByName(java.lang.String name)
          Zurückliefern des Kindes mit einem bestimmten Namen.
 int getChildCount()
          Zurückgeben der Anzahl der Kinder, die der ModelNode besitzt.
 ModelNode[] getChildren()
          Zurückgeben aller Kinder des aktuellen Knotens.
 java.lang.Class getContentType()
          Zurückgeben des Wertetyps für den aktuellen Wert des Knotens.
 ModelNodeDescription getDescription()
          Zurückgeben der Beschreibungsinformationen für die visuelle Darstellung des ModelNode.
 java.lang.Object getDisplayValue()
          Zurückgeben des Für die Nutzerausgabe angepassten Wertes.
 java.lang.String getFullKey()
          Zurückliefern des eindeutigen Identifikators des ModelNode inklusive der Bezeichner als seiner (rekursiven) Vorfahren.
 int getIndex(ModelNode child)
          Position innerhalb der Liste der Kinder, das ein bestimmter ModelNode hat.
 java.lang.String getKey()
          Zurückliefern des eindeutigen Identifikators des ModelNode.
 ModelNode getModelroot()
          Gibt den Wurzelknoten des ModelNode zurück.
 java.lang.String getOgnlAddress()
          Gibt die Adresse des Knotens innerhalb des Modellbaums in Ognl an.
 java.lang.String getOgnlAddressAlt()
          Gibt eine alternative Adresse des Knotens innerhalb des Modellbaums in Ognl an.
 ModelNode getParent()
          Zurückliefern des Elternknotes des ModelNode.
 ModelNode getRoot()
          Gibt den Wurzelknoten des ModelNode zurück.
 TaskCommand[] getTaskCommands()
          Zurückgeben der Operationen, die auf dem Aufgabenobjekt, das der ModelNode repräsentiert, durchführbar sind.
 java.lang.Object getValue()
          Zurückgeben des Wertes des Knotens.
 boolean hasChildren()
          Abfragen, ob der ModelNode Kinder besitzt.
 boolean hasTaskCommands()
          Zurückgeben, ob der ModelNode Operationen auf dem zu Grunde liegenden Aufgabenobjekt repräsentiert.
 boolean isLeaf()
          Zurückliefern, ob es sich bei dem Knoten um ein Blatt handelt.
 boolean isValidated()
          Zurückliefern, ob der entsprechende ModelNode bereits validiert wurde.
 void setContentType(java.lang.Class contentType)
          Setzen des Wertetyps für den aktuellen Wert des Knotens.
 void setDescription(ModelNodeDescription description)
          Setzen der Beschreibungsinformationen für die visuelle Darstellung des ModelNode.
 void setKey(java.lang.String key)
          Setzen eines eindeutigen Bezeichners für den ModelNode.
 void setParent(ModelNode parent)
          Setzen des Elternknotens für den ModelNode.
 void setTaskCommands(TaskCommand[] commands)
          Setzen der Operationen, die auf dem Aufgabenobjekt, das der ModelNode repräsentiert, durchführbar sind.
 void setValidated(boolean validated)
          Setzen, ob der entsprechende ModelNode validiert wurde.
 void setValue(java.lang.Object value)
          Setzen des Wertes des ModelNode korrespondierende zu setContentType().
 java.lang.String toString()
          Zurückgeben des Baumes ab diesem Knoten als String.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

PROPERTY_VALUE

public static final java.lang.String PROPERTY_VALUE
See Also:
Constant Field Values

PROPERTY_KEY

public static final java.lang.String PROPERTY_KEY
See Also:
Constant Field Values

PROPERTY_FULL_KEY

public static final java.lang.String PROPERTY_FULL_KEY
See Also:
Constant Field Values

PROPERTY_OGNL_ADDRESS

public static final java.lang.String PROPERTY_OGNL_ADDRESS
See Also:
Constant Field Values

PROPERTY_OGNL_ADDRESS_ALT

public static final java.lang.String PROPERTY_OGNL_ADDRESS_ALT
See Also:
Constant Field Values

PROPERTY_CONTENT_TYPE

public static final java.lang.String PROPERTY_CONTENT_TYPE
See Also:
Constant Field Values

PROPERTY_PARENT

public static final java.lang.String PROPERTY_PARENT
See Also:
Constant Field Values

PROPERTY_DESCRIPTION

public static final java.lang.String PROPERTY_DESCRIPTION
See Also:
Constant Field Values

ROOT

public static final java.lang.String ROOT
See Also:
Constant Field Values
Constructor Detail

ModelNode

public ModelNode(java.lang.String key)
Konstruktor für das Anlegen eines neuen ModelNode mit entsprechendem Key, der dem Knoten als eindeutiger Bezeichner zugewiesen wird.

Parameters:
key - Eindeutiger Bezeichner für den Knoten.
Method Detail

setTaskCommands

public void setTaskCommands(TaskCommand[] commands)
Setzen der Operationen, die auf dem Aufgabenobjekt, das der ModelNode repräsentiert, durchführbar sind.

Parameters:
commands -

getTaskCommands

public TaskCommand[] getTaskCommands()
Zurückgeben der Operationen, die auf dem Aufgabenobjekt, das der ModelNode repräsentiert, durchführbar sind.

Returns:
Verfügbare Kommandos auf dem repräsentierten Aufgabenobjekt des Vorgangs. Sind keine Operationen verfügbar, wird NULL zurückgeliefert.

hasTaskCommands

public boolean hasTaskCommands()
Zurückgeben, ob der ModelNode Operationen auf dem zu Grunde liegenden Aufgabenobjekt repräsentiert.

Returns:
True, falls Kommandos vorliegen. False, andernfalls.

getKey

public java.lang.String getKey()
Zurückliefern des eindeutigen Identifikators des ModelNode.

Returns:
Identifikator des Knotens.

getFullKey

public java.lang.String getFullKey()
Zurückliefern des eindeutigen Identifikators des ModelNode inklusive der Bezeichner als seiner (rekursiven) Vorfahren. Ist der Name des Bezeichners bspw. 'client' und der des Vaters 'root', so wird 'root.client' zurückgeliefert.

Returns:
Rekursive Liste der Bezeichner aller Vorfahren, verbunden durch einen '.'.

getAddress

public java.lang.String getAddress()
Zurückliefern der eindeutigen Adresse innerhalb des Modellbaums.

Returns:
Entspricht getFullKey().

getOgnlAddress

public java.lang.String getOgnlAddress()
Gibt die Adresse des Knotens innerhalb des Modellbaums in Ognl an. Der Rückgabewert ist ein Ognl-Ausdruck mit dem direkt durch Angabe des Wurzelknotens (root) auf den entsprechenden ModelNode per Ognl zugegriffen werden kann. Ist der Knoten 'client' das erste Kind vom zweiten Kind von 'root', so wird es mit 'getChildAt(1).getChildAt(0)' adressiert.

Returns:
Ognl-Ausdruck zum adressieren des ModelNode

getOgnlAddressAlt

public java.lang.String getOgnlAddressAlt()
Gibt eine alternative Adresse des Knotens innerhalb des Modellbaums in Ognl an. Der Rückgabewert ist ein Ognl-Ausdruck mit dem direkt durch Angabe des Wurzelknotens (root) auf den entsprechenden ModelNode per Ognl zugegriffen werden kann. Ist der Knoten 'client' das erste Kind vom zweiten Kind von 'root', so wird es mit 'children[1].children[0]' adressiert.

Returns:
Ognl-Ausdruck zum adressieren des ModelNode

setKey

public void setKey(java.lang.String key)
Setzen eines eindeutigen Bezeichners für den ModelNode.

Parameters:
key -

hasChildren

public boolean hasChildren()
Abfragen, ob der ModelNode Kinder besitzt.

Returns:
True, falls er Kinder besitzt. False, andernfalls.

addChildren

public void addChildren(java.lang.String key,
                        java.lang.Object[] concepts)
Hinzufügen einer Menge von Konzepten, mit einem bestimmten Bezeichner, die als Kinder des ModelNode angelegt werden.

Parameters:
key - Bezeichner (z.B. 'clients') der hinzuzufügenden Kinder.
concepts - Die Konzepte, die als Kinder hinzugefügt werden sollen.

addChildren

public void addChildren(java.lang.String key,
                        java.lang.Object[] concepts,
                        java.lang.String[] attributes)
Hinzufügen einer Menge von Konzepten, mit einem bestimmten Bezeichner, die als Kinder des ModelNode mit ausgewählten Attributen der Konzepte angelegt werden.

Parameters:
key - Bezeichner (z.B. 'clients') der hinzuzufügenden Kinder.
concepts - Die Konzepte, die als Kinder hinzugefügt werden sollen.
attributes - Attribute der Konzepte, die übernommen werden sollen.

addChildren

public void addChildren(java.lang.String key,
                        ModelNode[] children,
                        TaskCommand[] tCommands)
Hinzufügen einer Menge von ModelNode Objekten, mit einem bestimmten Bezeichner, die als Kinder des ModelNode angelegt werden. Zusätzlich werden entsprechende Operationen auf den hinzuzufügenden Repräsentationen von Aufgabenobjekten angegeben.

Parameters:
key - Bezeichner (z.B. 'clients') der hinzuzufügenden Kinder.
children - Die Konzepte, die als Kinder hinzugefügt werden sollen.
tCommands - Operationen, die auf den jeweiligen ModelNode ausgeführt werden können.

addChild

public void addChild(java.lang.Object concept,
                     ViewElementBean viewElement,
                     ITaskContext tContext)
Hinzufügen eines Kindknotens für diesen ModelNode mit allen Attributen, die im korrespondierenden ViewElementBean hinterlegt sind. Der aktuelle ITaskContext wird benötigt, um die gültigen Parameterwerte der zugehörigen ModelNodeDescription zu bestimmen.

Parameters:
concept - Das Objekt, dessen Attribute als Kind hinzugefügt werden sollen.
viewElement - Die Beschreibung der View, die alle Angaben über die anzuzeigenden Attribute enthält.
tContext - Der aktuelle ITaskContext, in dem der Vorgang aufgerufen wird.

addChild

public void addChild(ModelNode child)
Hinzufügen eines neuen Kindknotens für diesen ModelNode. Existiert bereits ein Eintrag mit selbem ModelNode.getKey(), so wird dieser ersetzt. Ansonsten wird der übergebene Eintrag als neu hinzugefügt.

Parameters:
child - Der Knoten, der als Kind hinzugefügt werden soll.

addChildren

public void addChildren(ModelNode[] children)
Hinzufügen eines Array von ModelNode als Kinder dieses Knotens.

Parameters:
children - Kinder, die dem aktuellen Knoten hinzugefügt werden sollen.

getChildren

public ModelNode[] getChildren()
Zurückgeben aller Kinder des aktuellen Knotens.

Returns:
Kinder des Knotens.

getContentType

public java.lang.Class getContentType()
Zurückgeben des Wertetyps für den aktuellen Wert des Knotens.

Returns:
ContentType des Wertes des Knotens.

setContentType

public void setContentType(java.lang.Class contentType)
Setzen des Wertetyps für den aktuellen Wert des Knotens.

Parameters:
contentType - Der Wertetyp des Wertes des Knotens.

getValue

public java.lang.Object getValue()
Zurückgeben des Wertes des Knotens. Handelt es sich nicht um ein Blatt, sondern einen Knoten mit Kindern, so ist der Wert NULL.

Returns:
Wert des Knotens oder NULL, falls es sich nicht um ein Blatt handelt.

getDisplayValue

public java.lang.Object getDisplayValue()
Zurückgeben des Für die Nutzerausgabe angepassten Wertes. Es werden entsprechende Alias-Werte des hinterlegten Wertebereiches berücksichtigt. Ist kein alternativer Wertebereich hinterlegt, so wird der Wert selbst zurückgegeben.

Returns:
Alternativer Anzeigewert des Wertes des Knotens.

getAlternativeValue

public java.lang.Object getAlternativeValue(java.lang.Object value)
Zurückliefern eines alternativen Wertes für einen übergebenen Value. Ist kein entsprechender Wertebereich hinterlegt bzw. entspricht kein Wert aus diesem Bereich dem übergebenen Wert, so wird der Wert selbst zurückgeliefert.

Parameters:
value - Wert, für den ein alternativer Value gesucht wird.
Returns:
Alternativer Value entsprechend eines Wertebereichs oder der Wert selbst, falls kein passender Wert in einem Wertebereich hinterlegt wurde.

setValue

public void setValue(java.lang.Object value)
Setzen des Wertes des ModelNode korrespondierende zu setContentType().

Parameters:
value - Wert des Blattknotens.

getChildCount

public int getChildCount()
Zurückgeben der Anzahl der Kinder, die der ModelNode besitzt.

Returns:
Anzahl der Kinder oder 0, falls der Knoten keine Kinder besitzt.

getAllowsChildren

public boolean getAllowsChildren()
Zurückliefern, ob dem Knoten Kinder hinzugefügt werden können.

Returns:
True, falls dem Knoten Kinder hinzugefügt werden können. False, andernfalls.

isLeaf

public boolean isLeaf()
Zurückliefern, ob es sich bei dem Knoten um ein Blatt handelt.

Returns:
True, falls der Knoten Kinder besitzt und damit kein Blatt ist. False, andernfalls.

setParent

public void setParent(ModelNode parent)
Setzen des Elternknotens für den ModelNode.

Parameters:
parent - Zugehöriger Elternknoten des ModelNode.

getParent

public ModelNode getParent()
Zurückliefern des Elternknotes des ModelNode.

Returns:
Elternknoten des ModelNode.

getChildAt

public ModelNode getChildAt(int position)
Zurückliefern des Kindes an einer bestimmten Position innerhalb der Liste der Children.

Parameters:
position - Position des Kindes in der Liste aller Kinder, das zurückgeliefert werden soll.
Returns:
Knoten an der entsprechenden Position.

getChildByName

public ModelNode getChildByName(java.lang.String name)
Zurückliefern des Kindes mit einem bestimmten Namen.

Parameters:
name - Bezeichnung des Kindes, das zurückgeliefert werden soll.
Returns:
Kind, das den übergebenen Namen hat. Null, falls kein Kind mit dem Namen vorhanden ist.

getIndex

public int getIndex(ModelNode child)
Position innerhalb der Liste der Kinder, das ein bestimmter ModelNode hat.

Parameters:
child - ModelNode, dessen Position gesucht wird.
Returns:
Die Position des ModelNode oder -1, falls der Knoten nicht vorhanden ist.

getChildAttributes

public java.lang.String[] getChildAttributes()
Zurückliefern eines Array der Attribute der enthaltenen Kinder des ModelNode

Returns:
Array der Attribute der Kinderknoten.

toString

public java.lang.String toString()
Zurückgeben des Baumes ab diesem Knoten als String.

Overrides:
toString in class java.lang.Object
Returns:
Der Inhalt des Baumes als String.

getModelroot

public ModelNode getModelroot()
Gibt den Wurzelknoten des ModelNode zurück.

Returns:
Wurzelknoten.

getRoot

public ModelNode getRoot()
Gibt den Wurzelknoten des ModelNode zurück.

Returns:
Wurzelknoten.

getDescription

public ModelNodeDescription getDescription()
Zurückgeben der Beschreibungsinformationen für die visuelle Darstellung des ModelNode.

Returns:
Beschreibung des Knotens für die visuelle Darstellung, die anschließend von einem entsprechenden GUI-Framework interpretiert werden kann.

setDescription

public void setDescription(ModelNodeDescription description)
Setzen der Beschreibungsinformationen für die visuelle Darstellung des ModelNode.

Parameters:
description - Beschreibung des Knotens für die visuelle Darstellung, die anschließend von einem entsprechenden GUI-Framework interpretiert werden kann.

setValidated

public void setValidated(boolean validated)
Setzen, ob der entsprechende ModelNode validiert wurde.

Parameters:
validated - True, falls das Model validiert wurde. False, andernfalls.

isValidated

public boolean isValidated()
Zurückliefern, ob der entsprechende ModelNode bereits validiert wurde.

Returns:
True, falls das Model bereits validiert wurde. False, andernfalls.